package com.dz.risk.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dz.risk.dao.ConfigDao;
import com.dz.risk.pojo.domain.ConfigEntity;
import com.dz.risk.pojo.model.CommonPageResult;
import com.dz.risk.pojo.model.PageModel;
import com.dz.risk.service.ConfigService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * @author Doke
 * @date 2021/7/9 13:47
 */
@Service
public class ConfigServiceImpl extends ServiceImpl<ConfigDao, ConfigEntity> implements ConfigService {

    private final ConfigDao configDao;

    @Autowired
    public ConfigServiceImpl(ConfigDao configDao) {
        this.configDao = configDao;
    }

    /**
     * 分页查询系统配置信息
     *
     * @param pageModel 分页实体
     * @return 配置信息
     */
    @Override
    public CommonPageResult pageList(PageModel pageModel, ConfigEntity configEntity) {
        QueryWrapper<ConfigEntity> wrapper = new QueryWrapper<>();

        wrapper.lambda()
                .like(!StringUtils.isEmpty(configEntity.getConfigType()), ConfigEntity::getConfigType, configEntity.getConfigType())
                .like(!StringUtils.isEmpty(configEntity.getConfigName()), ConfigEntity::getConfigName, configEntity.getConfigName())
                .isNotNull(ConfigEntity::getConfigName)
                .orderByDesc(ConfigEntity::getConfigType, ConfigEntity::getSerialNumber);

        Page<ConfigEntity> configEntityPage = configDao.selectPage(new Page<>(pageModel.getPageNum(), pageModel.getPageSize()), wrapper);
        return CommonPageResult
                .builder()
                .data(configEntityPage.getRecords())
                .pages(configEntityPage.getPages())
                .rows(pageModel.getPageSize())
                .total(configEntityPage.getTotal())
                .page(pageModel.getPageNum())
                .build();
    }

    @Override
    public List<ConfigEntity> queryList() {

        return configDao.queryList();
    }

    /**
     * 获取配置项类别
     *
     * @param pageModel      分页模型
     * @param configType     配置类型
     * @param configTypeCode 配置类型编码
     * @return 配置
     */
    @Override
    public CommonPageResult pageConfigType(PageModel pageModel, String configType, Integer configTypeCode) {
        PageHelper.startPage(pageModel.getPageNum(), pageModel.getPageSize());
        PageInfo<ConfigEntity> configTypeList = new PageInfo<>(configDao.selectConfigTypeList(configType, configTypeCode));
        return CommonPageResult
                .builder()
                .data(configTypeList.getList())
                .pages((long) configTypeList.getPages())
                .rows(pageModel.getPageSize())
                .total(configTypeList.getTotal())
                .page(pageModel.getPageNum())
                .build();
    }

    /**
     * 删除配置项类型
     *
     * @param configType 配置项类型
     */
    @Override
    public int deleteByConfigType(String configType) {
        UpdateWrapper<ConfigEntity> wrapper = new UpdateWrapper<>();
        wrapper.lambda().eq(ConfigEntity::getConfigType, configType);
        return configDao.delete(wrapper);
    }


    /**
     * 新增配置项类型
     *
     * @param configEntity 配置信息实体
     * @return 新增条数
     */
    @Override
    public int addConfigType(ConfigEntity configEntity) {
        return configDao.insert(configEntity);
    }
}
